package br.com.weysolucoes.dao;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import br.com.weysolucoes.conexao.ConexaoBD;
import br.com.weysolucoes.constantes.ConstantesSQL;
import br.com.weysolucoes.dto.RefrigeradorDTO;

public class RefrigeradorDAO {

	ConstantesSQL constantesSQL = new ConstantesSQL();

	// cadastra no banco de dados um refrigerador passado como parametro

	public boolean inserirRefrigerador(RefrigeradorDTO refrigeradorDTO) throws SQLException {
		
		ConexaoBD conexaoBD = new ConexaoBD();

		Statement st = null;
		ResultSet rs = null;

		try {

			st = conexaoBD.connection.createStatement();
			PreparedStatement preparedStatement = conexaoBD.connection
					.prepareStatement(constantesSQL.getSqlInsertRefrigerador());
			preparedStatement
					.setString(1, refrigeradorDTO.getModeloRefrigerador());
			preparedStatement.setString(2,
					refrigeradorDTO.getDescricaoRefrigerador());
			preparedStatement.setString(3,
					refrigeradorDTO.getFamiliaRefrigerador());
			preparedStatement.execute();
			return true;

		} catch (SQLException ex) {
			Logger lgr = Logger.getLogger(RefrigeradorDAO.class.getName());
			lgr.log(Level.SEVERE, ex.getMessage(), ex);
			return false;
		}
	}

	// lista todos os Refrigeradores cadastrados no banco de dados
	public List<RefrigeradorDTO> listRefrigerador() throws SQLException{
		
		ConexaoBD conexaoBD = new ConexaoBD();
		ArrayList<RefrigeradorDTO> lista = new ArrayList<RefrigeradorDTO>();
		Statement st = null;
		ResultSet rs = null;

		try {
			st = conexaoBD.connection.createStatement();

			String sql = constantesSQL.getSqlSelectRefrigerador();
			rs = st.executeQuery(sql);

			while (rs.next()) {

				RefrigeradorDTO refrigeradorDTO = new RefrigeradorDTO();
				refrigeradorDTO.setRefrigeradorId(rs.getInt(1));
				refrigeradorDTO.setModeloRefrigerador(rs.getString(2));
				refrigeradorDTO.setDescricaoRefrigerador(rs.getString(3));
				refrigeradorDTO.setFamiliaRefrigerador(rs.getString(4));
				lista.add(refrigeradorDTO);
			}

		} catch (SQLException ex) {
			Logger lgr = Logger.getLogger(RefrigeradorDAO.class.getName());
			lgr.log(Level.SEVERE, ex.getMessage(), ex);
		} finally {
			try {
				if (rs != null) {
					rs.close();
				}
				if (st != null) {
					st.close();
				}
				if (conexaoBD.connection != null) {
					conexaoBD.connection.close();
				}
			} catch (SQLException ex) {
				Logger lgr = Logger.getLogger(RefrigeradorDAO.class.getName());
				lgr.log(Level.WARNING, ex.getMessage(), ex);
			}

		}

		return lista;
	}
	
	// Remove refrigeradores cadastrados no banco de dados
	public boolean deletarRefrigerador(RefrigeradorDTO refrigeradorDTO) throws SQLException {

		ConexaoBD conexaoBD = new ConexaoBD();

		Statement st = null;
		ResultSet rs = null;

		try {

			st = conexaoBD.connection.createStatement();
			PreparedStatement preparedStatement = conexaoBD.connection
					.prepareStatement(ConstantesSQL.getSqlDeleteRefrigerador());
			preparedStatement.setInt(1, refrigeradorDTO.getRefrigeradorId());
			preparedStatement.executeUpdate();
			return true;

		} catch (SQLException ex) {
			Logger lgr = Logger.getLogger(RefrigeradorDAO.class.getName());
			lgr.log(Level.SEVERE, ex.getMessage(), ex);
			return false;
		}
	}

	// Edita todos os refrigeradores cadastrados no banco de dados
	public boolean editarRefrigerador(RefrigeradorDTO refrigeradorDTO) throws SQLException {

		ConexaoBD conexaoBD = new ConexaoBD();
		Statement st = null;
		ResultSet rs = null;

		try {

			st = conexaoBD.connection.createStatement();

			PreparedStatement preparedStatement = conexaoBD.connection
					.prepareStatement(ConstantesSQL.getSqlUpdateRefrigerador());
			preparedStatement.setString(1, refrigeradorDTO.getModeloRefrigerador());
			preparedStatement.setString(2, refrigeradorDTO.getDescricaoRefrigerador());
			preparedStatement.setString(3, refrigeradorDTO.getFamiliaRefrigerador());
			preparedStatement.setInt(4, refrigeradorDTO.getRefrigeradorId());
			preparedStatement.executeUpdate();
			return true;

		} catch (SQLException ex) {
			Logger lgr = Logger.getLogger(RefrigeradorDAO.class.getName());
			lgr.log(Level.SEVERE, ex.getMessage(), ex);
			return false;

		}
	}
}